#include <stdio.h>
#include <stdlib.h>
#include "ListeTirJ.h"

void initListeTirJ(ListeTirJ *lTirJ, VaisseauJoueur *V, int type)
{
    lTirJ->adPremiere = (CelluleTirJ *)malloc(sizeof (CelluleTirJ));
    lTirJ->adPremiere->tir = (TirJoueur *)malloc(sizeof (TirJoueur));
    //on initialise le tir ainsi que le tir precedent et suivant
    initTir(lTirJ->adPremiere->tir, V, type);
    lTirJ->adPremiere->tirsuiv = NULL;
    lTirJ->adPremiere->tirprec = NULL;
    lTirJ->nbCellule=1;
}

void ajouteTirJ(ListeTirJ *lTirJ, VaisseauJoueur *V, int type)
{
	CelluleTirJ *newTir;
    //on initialise et alloue de la place pour le tir
    newTir = (CelluleTirJ *)malloc(sizeof (CelluleTirJ));
    newTir->tir = (TirJoueur *)malloc(sizeof (TirJoueur));
    initTir(newTir->tir, V, type);

    //Si la liste est vide
    if(lTirJ->adPremiere == NULL)
    {
        newTir->tirprec = NULL;
        newTir->tirsuiv = NULL;
        lTirJ->adPremiere = newTir;
    }
    else
    {
        CelluleTirJ *temp = lTirJ->adPremiere;
        //On va en fin de liste
        while (temp->tirsuiv != NULL)
        {
            temp = temp->tirsuiv;
        }
        //on met le tir en fin de liste
        temp->tirsuiv = newTir;
        newTir->tirprec = temp;
        newTir->tirsuiv = NULL;
    }
    lTirJ->nbCellule++;

}

void nombreTirJ(ListeTirJ *lTirJ, VaisseauJoueur *V,int nb)
{
    int i;
    for(i=0;i<nb;i++)
    {
        ajouteTirJ(lTirJ, V, 1);
    }
}

void stopListeTir(ListeTirJ *l, Terrain *ter)
{
    CelluleTirJ *temp = l->adPremiere;

    while(temp->tirsuiv==NULL)
    {
        stopTir(temp->tir,ter);
        temp = temp->tirsuiv;
    }
}

void initType1ListeTir(ListeTirJ *l)
{
    CelluleTirJ *temp = l->adPremiere;
    temp->tir->typeTir = 1;

    while(temp==NULL)
    {
        temp->tir->typeTir = 1;
        temp = temp->tirsuiv;
    }
}
/* ---------------------- Fonctions de libération de la mémoire -------------------------- */

void supprListeTirJ(ListeTirJ * l)
{
	CelluleTirJ *temp = l->adPremiere;

	if(temp != NULL)
	{
		l->adPremiere = l->adPremiere->tirsuiv;

		if(l->adPremiere  != NULL)
		{
			l->adPremiere->tirprec = NULL;
        }
	}

    temp->tirsuiv = NULL;
	free(temp);

}

void videListeTirJ(ListeTirJ * l)
{
	while(l->adPremiere != NULL)
	{
		supprListeTirJ(l);
	}
}

void testamentTirJ(ListeTirJ * l)
{
	videListeTirJ(l);
}
